/*
 * TestBigIntExtend.cpp
 *
 *   Created on: 2010-3-20     
 *  Description: 
 *    Copyright: 2010 @ ICT Li Heyuan
 */

#include "../include/bigint.h"
#include <sys/time.h>

void testModPow()
{
	BigIntExtend a("11", 10);
	BigIntExtend b("2", 10);
	BigIntExtend c("25", 10);
	cout << a.modPow(b, c) << endl;
}

void testMillerRabin()
{
	BigIntExtend
			a(
					"438888888888888888888888888888888888888888888888888888888888888888888888888888889999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999438888888888888888888888888888888888888888888888888888888888888888888888888888889999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999993438888888888888888888888888888888888888888888888888888888888888888888888888888889999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999993999999999999999999999993",
					10);
	cout << a.millerRabin(5) << endl;
	cout << "finish" << endl;
}

void testGcd()
{
	BigIntExtend a("81818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181812");
	BigIntExtend b("1054");
	cout << a .gcd2(b) << endl;
//	cout << (a << 1) << endl;
}

struct timeval tv1, tv2;

void start()
{
	gettimeofday(&tv1, NULL);
}

void end()
{
	gettimeofday(&tv2, NULL);
	unsigned long timeuse = 1000000 * (tv2.tv_sec - tv1.tv_sec) + tv2.tv_usec
			- tv1.tv_usec;
	timeuse /= 1000;
	cout << "Cost " << timeuse << " ms" << endl;
}

int main()
{
	start();
	//testModPow();
	//	testMillerRabin();
	testGcd();

	end();
}
